MounRiver Studio

http://mounriver.com/   


5.4 编译

选中工程目录窗口中的工程,鼠标右键单击,然后点击build project,或者点击快捷工具栏中的 进行编译,console窗口会显示build过程中产生的信息:

图 5.4.1

若编译成功,则编译过程中产生的文件存放在源码目录下的obj文件中。


图 5.4.2

如果需要对编译过程做进一步的配置,选中工程目录窗口中的工程,鼠标右键单击,然后点击 properties,以下为常用配置:

图 5.4.3

选中左侧选项卡  C/C++ Build , 选中右侧选项卡 Behavior:

1. Stop on first build error                          编译遇到第一个错误就停止编译
2. Enable parallel build                              可选择的编译线程个数
3. Build on resource save (Auto build )      保存文件自动build
4. Build(incremental build)                   增量编译
5. Clean                                                     清除build产生的文件

点击左侧选项卡  C/C++ Build 的下拉选项,选择Settings,在右侧弹窗中选择Tool Settings下的Target processor。

RISC-V内核芯片属性配置显示如图5.4.4:
 

图 5.4.4

Target processor主要设置目标处理器属性,详细信息可以在GCC文档3.18.38 RISC-V Options查看。

1.  Architecture                  是指令集架构,rv32i是RISC-V 基础整数指令集
2.  RVM                              表示支持乘除法扩展
3.  RVA                               表示支持原子扩展
4.  RVF                               表示单精度浮点数扩展
5.  RVD                               为双精度浮点数扩展
6.  RVC                               为压缩指令扩展
7.  RVXW                            为自定义压缩指令扩展;支持lbu,lhu,lbusp,lhusp,sb,sh,sbsp,shsp的16位压缩指令
8.  Integer ABI                    为RISC-V应用程序整数二进制接口
9.  Floating point ABI         为RISC-V应用程序浮点数二进制接口
10.Tuning                           由微架构优化给定处理器的输出,默认是rocket
11.Code model 
         -mcmodel=medlow:   程序及其静态定义的符号必须位于单个2 GiB地址范围内,
                                          并且必须位于绝对地址-2 GiB和+2 GiB之间。程序可以静态或动态链接。
                                          这是默认的代码模型。
         -mcmodel=medany: 程序及其静态定义的符号可以任何单个2 GiB地址范围内。
                                          程序可以静态或动态地连接。
12. Small data limit           在某些目标上将小于n字节的全局和静态变量放进一个特殊的段。
                                          Align 中-mstrict-align -mno-strict-align 取决于处理器是否支持内存的非对齐访问

RISC-V 编译器支持多个 ABI,具体取决于 F 和 D 扩展是否存在。RV32 的 ABI 分别名为 ilp32,ilp32f 和 ilp32d。ilp32 表示 C 语言的整型(int),长整型(long)和指针(pointer) 都是 32 位,可选后缀表示如何传递浮点参数。在 ilp32 中,浮点参数在整数寄存器中传递; 在 ilp32f 中,单精度浮点参数在浮点寄存器中传递;在 ilp32d 中,双精度浮点参数也在浮点寄存器中传递。

自然,如果想在浮点寄存中传递浮点参数,需要相应的浮点 ISA 添加 F 或 D 扩展。因此要编译 RV32I 的代码(GCC 选项-march=rv32i),必须使用 ilp32 ABI(GCC选项-mabi=ilp32)。反过来,调用约定并不要求浮点指令一定要使用浮点寄存器,因此 RV32IFD 与 ilp32,ilp32f 和 ilp32d 都兼容。

ARM内核芯片属性配置显示如图5.4.5:
 

图 5.4.5

1.  ARM family            设置芯片内核类型,如上图CH32F103芯片内核为corte-m3
2.  Architecture           设置指令集架构,上述芯片为ARMV7-M,一般设置完芯片内核,此选项可选为默认。
3.  Instruction set        设置芯片工作模式,thumb或者arm模式。
4.  Thumb interwork   生成支持ARM和Thumb之间调用的代码指令集。
                                   如果没有此选项,则在v5之前的架构上,这两个指令集不能在一个程序中可靠地使用。
5.  Endianness            设置大小端,默认为小端
6.  unaligned access  设置是否允许非对齐访问,启用(或禁用)来自未对齐16位或32位的地址的
                                  16位和32位值的读取和写入。 默认情况下,未对齐访问为对于所有ARMv6之前的版本,
                                  所有ARMv6-M和ARMv8-M Baseline体系结构,均禁用;对于所有其他体系结构,则启用。
                                  设置完芯片内核类型,其他选型如不清楚可选择默认属性

点击左侧选项卡 C/C++ Build 的下拉选项,选择Settings,在右侧弹窗中选择Tool Settings下的Optimization,属性页如下图5.4.6所示:

图 5.4.6

该属性页主要是配置GCC的优化选项,想要添加其他优化选项可以写在下方other optimization flags中,常用优化选项含义为:

-O0:           无优化(默认)
-O和-O1:    使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化。
                 在编译大型程序的时候会显著增加编译时内存的使用。
-O2:           包含-O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化。
                 编译器不执行循环展开以及函数内联.此选项将增加编译时间和目标文件的执行性能.
-Os:           专门优化目标文件大小,执行所有的不增加目标文件大小的-O2优化选项。
                 并且执行专门减小目标文件大小的优化选项。
-O3:           打开所有-O2的优化选项并且增加部分参数。


点击左侧选项卡 C/C++ Build 的下拉选项,选择Settings,在右侧弹窗中选择Tool Settings下的GNU RISC-V Cross C Link -> Miscellaneous,属性页如下图5.4.7所示:

图5.4.7

此处选项勾选Use wchprintf,会使用简化版的printf函数,减少代码大小,支持常见的%s ,%c,%d,%f,%x,%o类型,支持%m.n d, %m.nf , %0m d, %-m d 等常见格式。

此处选项勾选Use wchprintfloat,会增加打印浮点数功能,相比标准库提供的Use float with nano printf 可以显著减少代码大小。

点击左侧选项卡  C/C++ Build 的下拉选项,选择Settings,在右侧弹窗中选择Build Steps,属性页如下图5.4.8所示:

图 5.4.8

如图红圈位置可以增加编译后执行的指令:

   eg:
   "${eclipse_home}\toolchain\RISC-V Embedded GCC\bin\riscv-none-embed-objcopy"
   -O ihex"${ProjName}.elf"  "文件存放路径\\${ProjName}.hex"
   可用于设置生成hex文件位置

   "${eclipse_home}\toolchain\RISC-V Embedded GCC\bin\riscv-none-embed-objcopy"
   -O binary "${ProjName}.elf""文件存放路径\\${ProjName}.bin"
   可用于设置生成bin文件位置

点击左侧选项卡 C/C++ Build 的下拉选项,选择Settings,在右侧弹窗中选择Tool Settings下的Warnings,显示如图5.4.9:

图 5.4.9

1. Check syntax only                                        只检查语法错误
2. Pedantic                                                       严格执行ISO C 和ISO c++要求的所有警告
3. Pedantic warnings as errors                         ISO C 和ISO c++要求的所有警告显示为错误
4. Inhibit all warnings                                      禁止全部警告
5. Warn on various unused elements               所有-Wunused 参数的集合
6. Warn on uninitialized variables                   未初始化局部变量的警告
7. Enable all common warning                        显示所有警告
8. Enable extra warnings                                 显示-wall之外的警告
9. Warn on undeclared global function            全局函数在头文件中没有声明的警告
10. Warn on implicit conversion                       隐式转换可能改变值的警告
11. Warn if pointer arithmetic                           对函数指针或者void*类型的指针进行算术操作
12. Warn if padding is included                        结构体填充警告
13. Warn if shadow variable                             变量或类型声明遮盖影响了另一个变量
14. Warn if suspicious logic ops                        可疑的逻辑操作符警告
15. Warn if struct is returned                             返回结构、联合或数组时给出警告
16. Warn if floats are compared as equal         浮点值比较相关的警告
17. Generate errors instead of warnings           生成错误 代替警告
                                                                         仅供参考,详见GCC警告参数

点击左侧选项卡 C/C++ Build 的下拉选项,选择Settings,在右侧弹窗中选择Tool Settings下的 GNU RISC-V Cross C Linker下的Miscellaneous。显示出如图5.4.10:

图 5.4.10

在右侧 Other objects中,可另外添加工程中要参与链接的文件,注意参与链接的文件所在的路径中不要包含括号或者特殊字符,点击绿色的加号,如图5.4.11:

图 5.4.11

显示出如图5.4.12:

图 5.4.12

点击 File systemWorkspace... ,选中要添加的库文件,点击OK ,添加成功则库文件路径会显示在下方窗口。

图 5.4.13

点击左侧选项卡 C/C++ Build的下拉选项,选择Settings ,在右侧弹窗中选择Tool Settings下的GNU RISC-V Cross C Create FlashImage 下的General。显示出如图5.4.14:

图 5.4.14

在右侧窗口 output file format(-O)中,点击下拉工具可选择生成Intel HEX或者生成Raw binary文件。

图 5.4.15

点击左侧选项卡 C/C++ Build 的下拉选项,选择 Build Artifact ,显示出如图5.4.16:

图 5.4.16

Artifact type           可下拉选择生成
executable             可执行文件
Static library          静态库
                              如果要缩减静态库大小,可选择 Tool Setting 下的 Debugging ,设置Debug level 为NONE
Artifact name         可更改默认生成的可执行文件等文件的名字,删除原来默认名称,填写自定义的名字。
Output prefix          库文件名字前缀

点击左侧选项卡 C/C++ Build 的下拉选项,选择Settings,在右侧弹窗中选择Tool Settings下的 GNU RISC-V Cross C Linker下的Libraries。显示出如图5.4.17:

图 5.4.17

在下方方框中点击绿色加号添加库文件路径(路径中不要包含“$”等特殊字符),上方方框中填入库名,库名不要加Lib前缀和.a后缀,以此完成库文件的添加。

以上所有配置如有更改,必须点击相应配置页面的 Apply 或者 Apply and Close 选项,否则更改的配置不生效。

 

 

目录


Copyright  (c)  2021 MounRiver工作室 All Rights Reserved